{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 感知机算法实验"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第 0 步：感知机算法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Perceptron():\n",
    "    '''\n",
    "        This is a simple implementation of Perceptron algorithm\n",
    "    '''\n",
    "    def __init__(self, learning_rate=0.01, epochs=50):\n",
    "        self.learning_rate = learning_rate\n",
    "        self.epochs = epochs\n",
    "\n",
    "    def train(self, X, y):\n",
    "        self.w = np.random.randn(1 + X.shape[1])\n",
    "        self.update_times_list = []\n",
    "        self.error_rate_list = []\n",
    "\n",
    "        for _ in range(self.epochs):\n",
    "            update_times = 0\n",
    "            \n",
    "            for xi, yi in zip(X, y):\n",
    "                update = self.learning_rate * (yi - self.predict(xi))\n",
    "                self.w[1:] +=  update * xi\n",
    "                self.w[0] +=  update\n",
    "                update_times += int(update != 0.0)\n",
    "            self.update_times_list.append(update_times)\n",
    "            self.error_rate_list.append((y != self.predict(X)).sum()/y.size)\n",
    "            \n",
    "        self.w = self.w/np.linalg.norm(self.w)\n",
    "        return self\n",
    "\n",
    "    def predict(self, x):\n",
    "        net_input = np.dot(x, self.w[1:]) + self.w[0]\n",
    "        return np.where(net_input >= 0.0, 1, -1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第 1 步：加载Iris数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \\\n",
      "0                  5.1               3.5                1.4               0.2   \n",
      "1                  4.9               3.0                1.4               0.2   \n",
      "2                  4.7               3.2                1.3               0.2   \n",
      "3                  4.6               3.1                1.5               0.2   \n",
      "4                  5.0               3.6                1.4               0.2   \n",
      "..                 ...               ...                ...               ...   \n",
      "145                6.7               3.0                5.2               2.3   \n",
      "146                6.3               2.5                5.0               1.9   \n",
      "147                6.5               3.0                5.2               2.0   \n",
      "148                6.2               3.4                5.4               2.3   \n",
      "149                5.9               3.0                5.1               1.8   \n",
      "\n",
      "     label  \n",
      "0        0  \n",
      "1        0  \n",
      "2        0  \n",
      "3        0  \n",
      "4        0  \n",
      "..     ...  \n",
      "145      2  \n",
      "146      2  \n",
      "147      2  \n",
      "148      2  \n",
      "149      2  \n",
      "\n",
      "[150 rows x 5 columns]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from sklearn.datasets import load_iris\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "# load dataset\n",
    "iris_dataset = load_iris()\n",
    "df = pd.DataFrame(iris_dataset.data, columns=iris_dataset.feature_names)\n",
    "df['label'] = iris_dataset.target\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第 2 步：构造两维二分类实验数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 实验参数：选择不同的实验数据（线性可分 vs. 线性不可分）\n",
    "exp_type = 'linear separable'\n",
    "if exp_type=='linear separable':\n",
    "    exp_classes = ['setosa', 'versicolor']\n",
    "    exp_features = ['sepal length (cm)', 'petal length (cm)']\n",
    "elif exp_type=='linear inseparable':\n",
    "    exp_classes = ['versicolor', 'virginica'] # 'setosa', 'versicolor', 'virginica'\n",
    "    exp_features = ['sepal width (cm)', 'petal width (cm)'] # 'sepal length (cm)', 'petal length (cm)', 'sepal width (cm)', 'petal width (cm)'\n",
    "else:\n",
    "    print('Wrong experiment type!')\n",
    "    sys.exit()\n",
    "\n",
    "assert(len(exp_classes)==2 and set(exp_classes).issubset(set(iris_dataset.target_names)))\n",
    "assert(len(exp_features)==2 and set(exp_features).issubset(set(iris_dataset.feature_names)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# convert class and feature names into sample and feature indexes\n",
    "class_id_set = [idx for idx in range(len(iris_dataset.target_names)) if iris_dataset.target_names[idx] in exp_classes]\n",
    "sample_id_set = [idx for idx in range(len(iris_dataset.target)) if iris_dataset.target[idx] in class_id_set]\n",
    "feature_id_set = [idx for idx in range(len(iris_dataset.feature_names)) if iris_dataset.feature_names[idx] in exp_features]\n",
    "\n",
    "# classify setosa and versicolor by their sepal length and petal length\n",
    "y = iris_dataset.target[sample_id_set]\n",
    "y = np.where(y == class_id_set[0], -1, 1) \n",
    "X = iris_dataset.data[sample_id_set, :]\n",
    "X = X[:, feature_id_set]\n",
    "\n",
    "# split the dataset into training set and test set\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)\n",
    "\n",
    "# fix random generator\n",
    "np.random.seed(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第 3 步：感知机模型训练与测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Weights: [-0.12297879 -0.34753939  0.92956581]\n",
      "Error rates on training data vs. test data :     0.00% vs. 0.00%\n"
     ]
    }
   ],
   "source": [
    "# train Perceptron\n",
    "# 实验参数：选择不同的迭代次数epochs和学习步长eta\n",
    "ppn = Perceptron(epochs=100, learning_rate=100)\n",
    "ppn.train(X_train, y_train)\n",
    "print('Weights: %s' % ppn.w)\n",
    "\n",
    "error_rate_on_training_set = (y_train != ppn.predict(X_train)).sum()/y_train.size\n",
    "error_rate_on_test_set = (y_test != ppn.predict(X_test)).sum()/y_test.size\n",
    "print('Error rates on training data vs. test data : \\\n",
    "    {:.2%} vs. {:.2%}'.format(error_rate_on_training_set, error_rate_on_test_set))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 第 4 步： 结果输出"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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IV796ldzyimnsPfee7Nw4UKOP/54dt99d/bYYw/OPvtsAI4//niuuOIKAG699VYOPPBA9txzT/bdd1+WL1/OypUrOeGEE9hjjz2YPn06N9xww3qxPfnkkxx99NFMmzaN/fffn/nz56+N8aSTTuKwww7jAx/4wEZdtzRs9baCmzRY/DvTCNbWasWTJElVZ+KpP2rfGi9bCOS6b42HeMrCnDlzOPHEE9cbP+6447j88svXPp89ezZ/93d/x7XXXst9993HH/7wB+bNm8fcuXO56aabALjnnnv4wAc+wO23384TTzzB4sWL+eMf/8idd97JCSec0On4L774Iu9617s455xzuOOOO7juuusYO3Ys5513HgB33nknP/jBD/j7v/97Vq5c2WnfM888k+nTpzN//ny+8IUvdEoyzZ07l//+7//msssuG7T3SBoWXMFNQ8G/M41gY0w8SZJUeSae+qMi3xrPmDGDCy+8cL3x6dOn89hjj7FkyRLuuOMOtt56a6ZMmcK1117Ltddey/Tp09l77725++67ue+++wCYOnUq+++/PwA77bQTDzzwAKeeeiq/+MUv2HLLLTsd/5577uHlL385++yzDwBbbrklbW1t3Hzzzbz//e8HYNddd2Xq1Knce++9nfat3+aNb3wjS5cuZdmyZQC87W1vY+zYLs2EpdHAFdw0FPw70wjW1hp0rHGqnSRJVWbiqT+GwbfGxxxzDFdccQWXX345xx13HFD0bzr99NOZN28e8+bN4y9/+Qsf/OAHAdh8883X7rv11ltzxx138PrXv57zzjtvvaqqzCQi1jtn5oZv+Lrbpnas+hikUaVKK7hdfRp8bhuYOb54vPq0oY9B3RvoFO8q/Z3Z5FyDrK2lxR5PkiRVnImn/hgG3xofd9xx/Nd//RdXXHEFxxxzDACHH3443/nOd3j22WcBWLx4MY899th6+z7xxBOsWbOGd77znfzLv/wLt912W6fXd911V5YsWcKtt94KwPLly+no6OCQQw7h0ksvBeDee+/l4YcfZpdddum0b/02N954I9tuu+16FVXSqFOVFdyuPg3mXAS5unieq4vnJp+abzCmeFfl76wi09U1soxpC6faSZJUcS4h1h+HntF5ZSAY9G+NP/nJT3LZZZfx/PPPM3nyZE488URmzpzZaZs5c+Zw/vnndzvdbrfddmP58uVst912a5uUH3bYYdx1110ccMABAGyxxRZccskltLa2dtp38eLFnHDCCaxZU9zAffGLX+z0+pgxY7j88ss59dRTWbFiBWPHjuW6667jlFNO4eSTT2aPPfagra2Niy++mE022aTTvjNnzuSEE05g2rRpbLbZZnzve98b0PskjRhVWMFt7sU9jx951lBGoq56m+Ldn7+bKvydDda1SHXaWuzxJElS1UVfpkmNFDNmzMg5c+Z0Grvrrrt49atf3feDzJ9d3CQvW1RUOh16hjfMDdTvz0dS/80c38try4YuDq1v5lZAd/9OB8x8eqijGZghupaImH6tz0cAACAASURBVJuZMwbtgBoU3d2DDYbP/fRPXDFnEXd+7vBBP7YkSeq73u7BrHjqryp8ayxJgyla102z6zqu5ho/uZya1s34cDOSrkWVMaa1hVVrrHiSJKnK7PEkSaPda4/v37iGTpUagw/USLoWVUZba7DK5uKSJFWaiSf6tiqbhp6fizREjjwLdnxd57EdX2d/p8FYgW2gx6hKY/DBMJKuRZXR1tLC6jXpPYMkSRU26qfabbrppixdupQJEyYQEc0OR6XMZOnSpWy66abNDkUa+ebPhkV/6Dy26A/F+GhNCtRWYKs1w66twAZ9f08G4xi1bUfK5zCSrkWVMKat+A511epkTJv3cZIkVdGoTzxNnjyZRYsW8fjjjzc7FHWx6aabMnmyvT+khnO1sfUNxnvi+yo1XFtLkWxatXrN2iSUJEmqllGfeGpvb2fHHXdsdhiS1DzLFvVvfDQYjPfE91VquLbWItnUYZ8nSZIqy6+GJGm062lVsdG82thgvCe+r1LDtbeWFU+ubCdJUmWZeJI0/FSh6XOVDPRaBnO1sZHyvg7Ge+IqbhrBImKriLgiIu6OiLsi4oBmxNHeWuvxZOJJkqSqGvVT7SQNM1Vq+lwFg3Ette2un1VMAxs/uUiO9Pe9GEnv62C8J4P1vkrVdA7wi8w8JiLGAJs1I4hajyen2kmSVF0mniQNLzZ97mywrmUwVhsbSe8rDM574ipuGoEiYkvgEOB4gMx8EXixGbFY8SRJUvU51U7S8GLT586qdC1VikVSI+0EPA58NyJuj4gLI2LzrhtFxEkRMSci5jRq9eB1iScrniRJqioTT5KGF5s+d1ala6lSLJIaqQ3YG/iPzJwOPAd8uutGmXlBZs7IzBkTJ05sTCC15uJWPEmSVFkmniQNLzZ97qxK11KlWCQ10iJgUWb+vnx+BUUiasjVVrXrWGPFkyRJVWXiSdLQGuiqZ9OOhaPOhfHbA1E8HnVu//sZDfQYVVGlaxmsWEbKyngwsq5FKmXmI8DCiNilHDoU+HMzYqlNteuw4kmSpMqyubikoTNYq57Z9LmzKl3LQGMZSSvjjaRrkdZ3KnBpuaLdA8AJzQiiraVIPL1o4kmSpMqy4knS0Olt1TMJRtbfyEi6FqmLzJxX9m+alplHZ+ZTzYhj7VQ7m4tLklRZJp4kDR1XPdOGjKS/kZF0LVJFrZ1qt8aKJ0mSqsrEk6Sh46pn2pCR9Dcykq5FqqjaqnYvdljxJElSVZl4kjR0XPVs5BtoM+3B+hupQlNv/96lhrPiSZKk6rO5uKShU2uofP2sYrrR+MnFf4TbaHlkGIxm2oPxN1KVpt7+vUsN19ZijydJkqrOxJOkoVWlFdg0uHprpj2UqxYOVhyDwb93qaFqFU+uaidJUnU51U6SNDiq0ky7KnFIari1U+2seJIkqbJMPEmSBkdVmmlXJQ5JDVdrLm6PJ0mSqsvEkyRpcFSlmXZV4pDUcGun2nWYeJIkqars8SRp+Jk/e+ANm68+DeZeDLkaohVeezwceVYjou3dYFxLVVSlmXZV4pDUcO1rK56caidJUlWZeJI0vAzGimVXnwZzLlr3PFevez6UyaeqrL42mKrSTLsqcUhqqLaWWo8nK54kSaoqp9pJGl56W7Gsr+Ze3L/xRhmMa5GkUaxW8bTK5uKSJFWWiSdJw8tgrFiWq/s33iiuviZJAxIRtLUEq6x4kiSpskw8SRpeBmPFsmjt33ijuPqaJA1YW2vY40mSpAoz8SRpeDn0DGhp7zzW0t6/Fctee3z/xnsyfzacvTvM3Kp4nD+7f/u7+pokDVh7a4sVT5IkVZiJJ0nDT0Tvzzdkyv6s/39/LeV4H9Uagy9bCOS6xuD9ST5NOxaOOhfGbw9E8XjUuTbFlqR+MPEkSVK1uaqdpOHl+lmw+sXOY6tfLMb7mrC5fhbQ9T9S1vT/GD01Bu9P4sjV1yRpQNpagg6bi0uSVFlWPEkaXgajIXdVjiFJGrCi4snEkyRJVWXiSdLwMhgNuatyDEnSgLW3uqqdJElVZuJJ0vAyGA25q3IMSdKAtbW20LHGxJMkSVU17Hs8RUQrMAdYnJlHNjseSRtw9Wkw92LI1RCtxUpyR57V9/1r/ZCun1VMaxs/uUj29LevUhWOMVjmzx54HINxDElqgraWcKqdJEkVNuwTT8BHgLuALZsdiKQNuPo0mHPRuue5et3z/iafBpoUqcoxBqq2ul6t0XltdT3oe2yDcQxJapIxba5qJ0lSlQ3rqXYRMRl4K3Bhs2OR1AdzL+7fuDast9X1hvIYktQkrmonSVK1DevEE/A14JOsvy76WhFxUkTMiYg5jz/++NBFJml9ubp/49owV+iTNMq1tVrxJElSlQ3bxFNEHAk8lplze9suMy/IzBmZOWPixIlDFJ2kbkVr/8a1Ya7QJ6kJIuKhiLgzIuZFxJxmxjLGxJMkSZU2bBNPwEHA2yLiIeC/gDdGxCXNDUlqkPmz4ezdYeZWxeP82c2OaOO89vj+jWvDXKFPUvO8ITP3yswZzQyirTXoWONUO0mSqmrYJp4y8/TMnJyZOwDHAf+Tme9rcljS4Ks1fl62EMh1jZ+HY/LpyLNgxgfXVThFa/G8P43F1dm0Y+Goc2H89kAUj0ed2/8V+gZ6DElqkraWFle1kySpwkbCqnbSyNZb4+fhmBg48iwTTYNtpKzQJ2k4SeDaiEjgW5l5QdcNIuIk4CSAKVOmNCyQMW1Bh1PtJEmqrGFb8VQvM2/MzCObHYfUEDZ+liRVz0GZuTdwBPCPEXFI1w2Gqs9mUfFk4kmSpKoaEYknaUSz8bMkqWIyc0n5+BhwJbBvs2Jpaw2n2kmSVGEmnqSqs/GzJKlCImLziBhX+x04DPhjs+IZ09pCxxorniRJqip7PElVV+u7c/2sYnrd+MlF0sl+PJKk5ngpcGVEQHEveVlm/qJZwVjxJElStZl4koYDGz9LkioiMx8A9mx2HDX2eJIkqdqcaidJkqRha0xbCx1WPEmSVFmVqHiKiBnA/wEmASso+gRcl5lPNjUwSZIkVVpbS1jxJElShTW14ikijo+I24DTgbHAPcBjwMHAryLiexExpZkxSpIkqbraWlvoWJNkWvUkSVIVNbviaXPgoMxc0d2LEbEXsDPw8JBGJUmSpGGhvSUA6FiTtLdGk6ORJEldNTXxlJnnbeD1eUMViyRJkoaf9raigH/V6jW0t9q+VJKkqml2xRMAEbEjcCqwA3UxZebbmhWTJEmSqq+trHhaZYNxSZIqqRKJJ+Aq4CLgp4DdISVJktQntSqnDhuMS5JUSVVJPK3MzHObHYQkSZKGl7WJpzVWPEmSVEVVSTydExFnAtcCL9QGM/O25oUkSZKkqmsrG4q/2GHFkyRJVVSVxNMewPuBN7Juql2WzyWps/mz4fpZsGwRjJ8Mh54B045tdlSSpCaorWRnxZMkSdVUlcTT3wI7ZeaLzQ5EUsXNnw0//TCsWlE8X7aweA4mnySpHyLiFcCizHwhIl4PTAP+MzOfbm5k/WOPJ0mSqq0qa87eAWzV7CAkDQPXz1qXdKpZtaIYlyT1x4+A1RHxSopFXnYELmtuSP3X1lLczr5o4kmSpEqqSsXTS4G7I+JWOvd4elvzQpJUScsW9W9cktSTNZnZERF/C3wtM78eEbc3O6j+WjvVbrVT7SRJqqKqJJ7ObHYAkoaJ8ZOL6XXdjUuS+mNVRLwb+HvgqHKsvYnxbJR1q9pZ8SRJUhVVZardw8DvM/PXmflr4A/AgibHJBX9hM7eHWZuVTzOn93siHToGdA+tvNY+9hivD/8bCXpBOAA4POZ+WBE7Ahc0uSY+m3dqnZWPEmSVEVVSTz9kHWr2QGsLsek5qk1sV62EMh1TaxNUDTXtGPhqHNh/PZAFI9Hndu/xuJ+tpJEZv4Z+BRwW/n8wcz8UnOj6j8rniRJqraqTLVrq1/RLjNfjIgxzQxI6rWJtaunNde0Ywf2GfjZShIRcRTwFWAMsGNE7AXMGm49Ntta7PEkSVKVVaXi6fGIWHuTExFvB55oYjySTaxHMj9bSQKYCewLPA2QmfMoVrYbVmoVT65qJ0lSNVUl8XQy8JmIeDgiHqYo+z6pyTFptOupWbVNrIc/P1tJAujIzGVdxoZd2dDaqXZWPEmSVEmVSDxl5v2ZuT/wGmC3zDwwM+9vdlwa5QaribWqx89WkgD+GBHvAVojYueI+Drwv80Oqr9qzcXt8SRJUjU1NfEUEe+LiLUxZOazmbm87vVXRMTBzYlOo95gNLFWNfnZShLAqcBuwAvAD4BngI82NaKNMKY21a7DxJMkSVXU7ObiE4DbI2IuMBd4HNgUeCXwOoo+T59uXnga9QbaxFrV5WcraZTLzOeBz5Y/w9a6iien2kmSVEVNTTxl5jkR8Q3gjcBBwDRgBXAX8P7MfLiZ8UmSJI1UETED+AywA3X3hJk5rVkxbYy2llqPJyueJEmqomZXPJGZq4FflT+SJEkaGpcCnwDuBPqdtYmIVmAOsDgzjxzk2PqsNtVulc3FJUmqpKYnniRJktQUj2fmTwaw/0coqtS3HKR4Nkptqt0qK54kSaokE08amebPhutnwbJFMH5ysVqZ/XwkSap3ZkRcCFxP0WAcgMz88YZ2jIjJwFuBzwOnNSzCPrDHkyRJ1WbiSSPP/Nnw0w/DqhXF82ULi+dg8kmSpHVOAHYF2lk31S6BDSaegK8BnwTG9bRBRJwEnAQwZcqUAQXam/aW2lQ7K54kSaqiSiSeImIT4J2s39xyVrNi0jB2/ax1SaeaVSuKcRNPkiTV7JmZe/R3p4g4EngsM+dGxOt72i4zLwAuAJgxY0bDypFaWoLWljDxJElSRbU0O4DSfwNvBzqA5+p+pP5btqh/45IkjU6/i4jXbMR+BwFvi4iHgP8C3hgRlwxqZP3U1hJ02FxckqRKqkTFEzA5M9/c7CA0QoyfXEyv625ckiTVHAz8fUQ8SNHjKYDMzGm97ZSZpwOnA5QVTx/PzPc1ONZejWltcVU7SZIqqiqJp/+NiD0y885mB6IR4NAzOvd4AmgfW4xLkqSaEfOlX1urU+0kSaqqpiaeIuJOiiaWbcAJEfEA/fjGTepWrY+Tq9pJkrSeiNgyM58Blg/0WJl5I3DjQI8zUG2tLXSsMfEkSVIVNbvi6cgmn18j1bRjTTRJktS9yyjuweZSfAEYda8lsFMzghqI9pZwqp0kSRXV1MRTZi4AiIjvZ+b761+LiO8D7+92R0mSJG2UzDyyfNyx2bEMlva2FqfaSZJUUVVZ1W63+icR0Qq8tkmxSJIkjXgRcX1fxoYDV7WTJKm6mt3j6XTgM8DYiHimNgy8CFzQtMAkSZJGqIjYFNgM2DYitmbdVLstgUlNC2wA2luteJIkqaqaPdXui8AXI+KL5dK8kiRJaqx/AD5KkWSay7rE0zPAec0KaiBMPEmSVF3Nbi5e88OI2LvL2DJgQWZ2NCMgSZKkkSgzzwHOiYhTM/PrzY5nMLS1Bh1rnGonSVIVVSXx9E1gb2A+xbduewB3ABMi4uTMvLaZwUmSJI00IyXpBNDeYsWTJElVVZXm4g8B0zNzRma+FtgL+CPwJuDfmxmYJEmSqq29zebikiRVVVUST7tm5p9qTzLzzxSJqAeaGJMkSZKGgTYrniRJqqyqJJ7uiYj/iIjXlT/fBO6NiE2AVd3tEBGbRsQfIuKOiPhTRHxuaEOW+mj+bDh7d5i5VfE4f3azI5IkiSi8LyLOKJ9PiYh9mx3XxmhvDVZZ8SRJUiVVJfF0PPAXihVW/gl4oBxbBbyhh31eAN6YmXtSTM17c0Ts3/BIpf6YPxt++mFYthDI4vGnHzb5JEmqgm8CBwDvLp8vZxivatexxoonSZKqqBLNxTNzBfDV8qerZ3vYJ+teay9//KpL1XL9LFi1ovPYqhXF+LRjmxOTJEmF/TJz74i4HSAzn4qIMc0OamO0tbZY8SRJUkVVouIpIg6KiF9FxL0R8UDtpw/7tUbEPOAx4FeZ+ftutjkpIuZExJzHH3+8EeFLPVu2qH/jkiQNnVUR0Ur5xV1ETASGZdlQe0vY40mSpIqqROIJuAg4CzgY2Kfup1eZuToz9wImA/tGxO7dbHNBuVrejIkTJw5y2NIGjJ/cv3FJkobOucCVwEsi4vPAzcAXmxvSxmlvbXFVO0mSKqoSU+2AZZn5843dOTOfjogbgTcDfxy0qKSBOvSMoqdT/XS79rHFuCRJTZSZl0bEXOBQIICjM/OuJoe1UdparXiSJKmqqpJ4uiEivgz8mKJpOACZeVtPO5Tl4KvKpNNY4E3AvzU8Uqk/an2crp9VTK8bP7lIOtnfSZLUZBHx/cx8P3B3N2PDSntri4knSZIqqiqJp/3Kxxl1Ywm8sZd9Xg58r+xN0ALMzsyrGxSftPGmHWuiSZJURbvVPynvqV7bpFgGpK0l6FjjVDtJkqqoEomnzHzDRuwzH5jegHAkSZJGrIg4HfgMMDYinqGYZgfwInBB0wIbgPY2K54kSaqqSjQXj4iXRsRFEfHz8vlrIuKDzY5LkiRppMnML2bmOODLmbllZo4rfyZk5unNjm9jFKvaJZlWPUmSVDWVSDwBFwO/BCaVz+8FPtq0aCRJkka4zDw9IraOiH0j4pDaT7Pj2hhtrcUt7Wqn20mSVDlVSTxtm5mzgTUAmdkBrG5uSJIkSSNXRJwI3ETx5d/nyseZzYxpY7WXiSf7PEmSVD1VSTw9FxETKBqKExH7A8uaG5IkSdKI9hFgH2BB2W9zOvB4c0PaOO2tRZuqF+3zJElS5VSiuThwGvAT4BUR8VtgInBMc0OSJEka0VZm5sqIICI2ycy7I2KXZge1MdpaisRTx2orniRJqppKJJ4y87aIeB2wC8XKKvdk5qomhyVJkjSSLYqIrYCrgF9FxFPAkg3tFBGbUkzR24TiXvKKzDyzoZFuQHtbOdXOiidJkiqnqYmniHhHDy+9KiLIzB8PaUCSJEmjRGb+bfnrzIi4ARgP/KIPu74AvDEzn42IduDmiPh5Zv6uUbFuSHtLkXhyqp0kSdXT7Iqno3p5LQETT5IkDWdr1sBf/woLFhQ/Dz8MK1fCmU0tkBnVImKbbobvLB+3AJ7sbf/MTODZ8ml7+dPUOW5trU61kySpqpqaeMrME5p5fkmSNEArV8LChesSS7XkUu33RYtgVZfZ85Mnm3hqrrkUiaIApgBPlb9vBTwM7LihA0REa3mcVwLnZebvu9nmJOAkgClTpgxW7N1at6qdFU+SJFVNsyueJElSVWXC00+vn0yqf/7oo533aWmBSZNg6lTYf//iccqU4rH2+7hxzbkeAZCZOwJExPnATzLzZ+XzI4A39fEYq4G9yh5RV0bE7pn5xy7bXABcADBjxoyGliKtXdWuw4onSZKqxsSTJEmj1erV8MgjPVcrPfwwLF/eeZ9NN12XSDrqqM6JpSlTimqm9vbmXI/6a5/MPLn2JDN/HhH/0p8DZObTEXEj8GbgjxvYvGHaWqx4kiSpqkw8SZI0Uq1cWSSPeqpW6m4a3DbbFEmknXeGQw/tXKk0dSpMnAgRzbkeDbYnIuKfgUsopt69D1i6oZ0iYiKwqkw6jaWokvq3hka6AbUeT6vs8SRJUuVUdVU7AFe1kySpJ/XT4HqqVuptGtwBB3Q/DW6LLZpzPWqGdwNnAleWz28qxzbk5cD3yj5PLcDszLy6MSH2zZiyx9MqV7WTJKlyml3x5Kp2kiR1Z/XqYjW4nqqVepoGV0sg7bnn+tVK223nNDitlZlPAh+JiPHAmsxcvqF9yv3mA9MbGlw/tdWai1vxJElS5biqnSRJzVCbBtdTtdLChdDR0XmfnqbB1ZJLToNTP0TEPsB3gHHl82XA/5OZc5sa2EZYO9XOHk+SJFVOsyue1oqItwK7AZvWxjJzVvMikiRpI2XCU0/1XK20YAE89ljnfVpaioqkKVOKaXDHHbd+426nwWlwXQSckpm/AYiIg4HvAtOaGtVGWDvVrsPEkyRJVVOJxFO5nO9mwBuAC4FjgD80NShJknpSmwbXNZlU//zZZzvvM3bsuiRS/TS4WlLJaXAaestrSSeAzLw5Ivo03a5qahVPHWucaidJUtVUIvEEHJiZ0yJifmZ+LiK+iv2dJEnNsmJFMdWtu0ql2mpwXafBTZhQJJB23hne9KbOTbunToVtt3UanKrmDxHxLeAHFL013wXcGBF7A2Tmbc0Mrj/aWmwuLklSVVUl8bSifHw+IiZRLOW7YxPjkSSNVLVpcL1VK/U0DW7qVDjwwPWrlZwGp+Fpr/LxzC7jB1Ikot44tOFsvDE2F5ckqbKqkni6OiK2Ar4M3EZxs3Nhc0OSJA1L9dPgekou9TYNbq+9OlcrOQ1OI1RmvqHZMQyWtc3FrXiSJKlyqpJ4+vfMfAH4UURcTdFgfGWTY5IkVdGKFUXyqKcV4XqaBjd1KrzqVfA3f9O5abfT4DTKRMRpXYYSeAK4OTMfbEJIA7ZuVTsrniRJqpqqJJ5uAWr9BF4AXoiI22pjkqRRIhOefLJzMqlrgqm3aXAHHbR+tZLT4KSuxnUztgPw2YiYmZn/NcTxDNi6qXZWPEmSVDVNTTxFxMuA7YCxETEdqH3dvCXFKneSpJGkowOWLOm5Wunhh+G55zrvM3bsuiTS9OnrN+3ebjtoq8r3KFL1ZebnuhuPiG2A64Bhl3hqa7W5uCRJVdXsO/XDgeOBycBZdePPAJ9pRkCSpAF4/vmeK5Vq0+BWr+68T20a3C67wGGHrd+422lw0pDIzCcjhuf/2Npaaj2enGonSVLVNDXxlJnfA74XEe/MzB81MxZJ0gZkwtKlPVcrLVgATzzReZ+WFpg8uUggHXzw+r2VpkyBzTdvzvVI6iQi3gg81ew4Nka7q9pJklRZza54qvltRFwETMrMIyLiNcABmXlRswOTpFGjNg2up5XgFiwoKprq1abBTZ0Ke++9frWS0+CkyomIOykaitfbBlgCfGDoIxq41pagJZxqJ0lSFVXlvwa+W/58tnx+L3A5YOJJkgZL/TS47pJLixevPw1u222LBNKuu8Lhh6/fX2nCBKfBScPPkV2eJ7A0M5/rbuPhoq21hVVrTDxJklQ1VUk8bZuZsyPidIDM7IiI1RvaSZJUqk2D66m3UnfT4Fpb102DO+SQztPgaqvBOQ1OGnEyc0GzY2iE9pZwqp0kSRVUlcTTcxExgbLsOyL2B5Y1NyRJqpD6aXA9TYXrOg1us83WVSbNmLF+b6VJk5wGJ2nEaG9rcaqdJEkVVJX/4jgN+Anwioj4LTAROKa5IUnSEHr++d57K3U3DW7ixCKJ9JrXwBFHrN+4e5ttnAYnadRoa2lxVTtJkiqoEomnzLwtIl4H7AIEcE9mrmpyWJI0OOqnwfU0Fa6naXBTp8LrXrd+b6Xtty8qmiRJALS3Bh1WPEmSVDmVSDxFxKbAKcDBFNPtfhMR52fmyuZGJkl90NFRVCT11Fupu2lwm2++rkKp6zS4qVOLaXCtrc25HkkahtpbW+hYY8WTJElVU4nEE/CfwHLg6+XzdwPfB/6uaRFJUs1zz61LJHWXXOrrNLj6qXBOg5OkQdXWGrxoxZMkSZVTlcTTLpm5Z93zGyLijqZFI2n0yCymufVUrbRgQTFNrl5b27rV4F73uvV7K02ZAmPHNud6JGmUam9pcaqdJEkVVJXE0+0RsX9m/g4gIvYDftvkmCSNBLVpcD1VK/U2DW7qVNhnn/WrlZwGJ0mV094WdNhcXJKkyqlK4mk/4AMR8XD5fApwV0TcCWRmTmteaJIqrX4aXHfJpd6mwe22G7zlLev3V9p6a6fBSdIw09bS4lQ7SZIqqCqJpzc3OwBJFVSbBtdTtVJv0+Bqq8F1rVZyNThJGpGKVe2seJIkqWoqkXjKzAXNjkFSE9RPg+suubShaXD77rsuoeQ0OEkaEhGxPcXCMC8D1gAXZOY5zY2qWNXu/2fvzuPkqsqEj/+edDcQtoRNhYQEdJiAkEAwQDDKi6DEhSUqg4iK8OogI4IzozgwOsDgxgyuKIqIjPoKCCJGBBQERJQRJEBI2IMIZEHZJARIIMvz/nFvh+pKd6crqeqqrvy+n08+3XXuubeee6qgTj91lqWOeJIkqeW0ROJJUpt6/vn+RyvNnw8rqv5IeMUrek6Dq16422lwktRsy4BPZObtEbEJcFtE/Doz72lmUJ0dw3j+peWrryhJkgaViSdJa6ZyGlxfyaX+psG96U2r7gTnbnCS1PIy8zHgsfL3RRFxLzAKaGriqWtYuKudJEktyMSTpN4tXbrqbnDVyaXFi3ues/HGLyeR9txz1dFKW2/tNDhJaiMRsR0wEbill2PHAMcAjBkzpuGxdHUMc40nSZJakIknaV313HP9j1ZasKDvaXC77ALveMeqC3c7DU6S1hkRsTHwU+CfM/PZ6uOZeS5wLsCkSZManhHq7AjXeJIkqQWZeJLaUSY8/njfays9+ig8/XTPcyqnwe2336qjlbbd1mlwkiQAIqKLIul0QWZe1ux4oFxcvPoLE0mS1HQmnqShaOlSmDev79FKjz4KS5b0PKd7GtzYsTB58qqjlZwGJ0kagIgI4HvAvZn5lWbH061zWDjVTpKkFmTiSWpFldPgeksu9TYN7pWvLJJIEybAQQf1HK00diyMHOk0OElSPUwBPgDMjoiZZdm/Z+ZVTYyJrs5hTrWTJKkFmXiSBltv0+Cqk0t/+1vPczo7i6luldPgKkcrOQ1OkjRIMvP3QMt9k9E1LFjqiCdJklrOkE08RcS2wA+BVwErgHMz8+vNjUqi72lw3Y9XNw1u771fTig5DU6SpAHp7BjGMkc8SZLUcoZs4glYBnwiM2+PiE2A2yLi15l5T7MDU5tbtKj/Rbv7mgY3duzL0+CqF+52GpwkSWulWFzcEU+SJLWaIZt4teXcFgAAIABJREFUyszHgMfK3xdFxL3AKMDEk9Zc9zS4vpJKvU2D6+oqprqNGQP777/q2krbbgsbbNCc+5EkaR3R1RGu8SRJUgsasomnShGxHTARuKWXY8cAxwCMGTNmUONSC3rpJZg/v/+Fu198sec5m2zScxpcZVJpzBh41aucBidJUpN1DhtGJixfkXQMcxSxJEmtYsgnniJiY+CnwD9n5rPVxzPzXOBcgEmTJjn+ut0tWtT32kqPPFJMg8uqt8GrXlUkkXbbDQ45ZNWFu0eObM69SJKkAevqLJJNS5evoGOYXwhJktQqhnTiKSK6KJJOF2TmZc2ORw1WPQ2ut9FKfU2DGzsW3vKWVddWGj3aaXCSJLWBrmHDgCLxtEGXiSdJklrFkE08RUQA3wPuzcyvNDse1cFLL8G8efz+utu44ZoZbPiX+eyw5Cn26nieVzz9l96nwW266cvJpClTVh2t9KpXQdkRlSRJ7auzoxjxtGy5A9wlSWolQzbxBEwBPgDMjoiZZdm/Z+ZVTYxJ/emeBtfXVLhyGtwbgDeUpzy+0WY8NvIVvPTaHRk9bVrP0UpjxjgNTpIkAcWudgBLq3eWlSRJTTVkE0+Z+XvAlSNbRSb89a99r630yCPwzDM9z+nqKpJHY8asnAb3+bte4O7OEcwf8Qoe22QrXursAmDUyOHcdNJ+TbgxSZI0FHR1dK/x5IgnSZJayZBNPGmQldPg+lxbqb9pcGPHwhve8PJopX6mwZ130pX01l1c8Mzixt2bJEka8jrLPsWy5Y54kiSplZh4UuHZZ/sfrfTYY6vuBrf11kUSaeJEqJ4GN3YsjBhRcxjbjBzO/F6STNuMHL6mdyZJktYBnY54kiSpJZl4WhesWPHybnB9JZeqp8Gtt97Lu8EdcEDPhNKYMcWx9deve6gnTh3HyZfNZvHS5SvLhnd1cOLUcXV/LkmS1D7W63h5VztJktQ6TDy1g/6mwT3yCMydu+o0uBEjXk4iveENPafAjR0Lr3xlU3aDmzZxFABnXn0/C55ZzDYjh3Pi1HEryyVJknrT2dE91c4RT5IktRITT0PBs8/2vbZSf9Pgxo6F170O3vnOnqOV1nAa3GCZNnGUiSZJklSTlVPt3NVOkqSWYuKp2VasKHaD6y+xtHBhz3Mqp8FNnbrqaKXRoxsyDU6SJKlVrZxqt8zEkyRJrcTEU6O9+GIx1a2vtZXmzi2mylWqnAb3xjeuOlqpSdPgJEmSWlXnsGLE07IVTrWTJKmVmHiqh/vugzlzek8uPfbYqvW7p8FNmgTvfnfP0UpjxrT0NDhJkqRW1Oni4pIktSQTT/Vw7LHw298Wv6+3XpE8GjMG3vpWp8GJ6XfMb5vF0j8zfTYX3TKX5Zl0RPDevbblc9PGNzusNdJOr4sk6eWpdi4uLklSazHxVA//9V/F4t5Og1OV6XfM5+TLZrN46XIA5j+zmJMvmw0w5JIcn5k+mx/d/OjKx8szVz4easmndnpdJEmFlYuLO+JJkqSWYoakHvbaCyZPLqbQmXRShTOvvn9lcqPb4qXLOfPq+5sU0Zq76Ja5NZW3snZ6XSRJha6Vu9o54kmSpFZilkRqoAXPLK6pvJUtz9478n2Vt7J2el0kSYWulVPtHPEkSVIrMfEkNdA2I4fXVN7KOiJqKm9l7fS6SJIKLi4uSVJrco0n1VU9FmxupQWs3/fdP3DTn55e+XjKazbngn/ce8Dnnzh1HCdeeidLKxY67eoITpw6rq5xDob37rVtjzWeKsuHmhOnjuuxxhPA8K6OIfm6SJIKXcO613gaeiNxJUlqZ454Ut10L9g8/5nFJC8v2Dz9jvkDvkb3Atbd07e6F7D+zPTZDYq6b9VJJ4Cb/vQ07/vuH2q7UHX/d4j2hz83bTzvnzxm5QinjgjeP3nMkFtYHIoFxL/4rvGMGjmcAEaNHM4X3zXehcUlaQAi4vyIeDwi7mp2LJWcaidJUmtyxJPqpr8Fmwf6B31/C1gPdoKjOum0uvLenHn1/asscrp0RdbUJq3kc9PGD8lEU2+mTRw1JF8DSWoB3we+CfywyXH08PKudkP0Gx5JktqUI55UN/VYsLmdFrAGF7GWJLWfzLwRGPi3MIOke8TT0hWOeJIkqZWYeFLd1GPB5nZawBpcxFqStO6KiGMiYkZEzHjiiSca/nyd5RpPyxzxJElSSzHxpLo5ceo4hnd19CirdcHmvhaqbsYC1lNes3lN5b2pR5tIkjQUZea5mTkpMydttdVWDX++jmFBhLvaSZLUalzjSSut7Y503XXX5hrd6wet7a529dgZ74J/3Ju3fOUG5jz+/MqyHV6xUU272k2bOIqfzHi0x7pQu48ZUfPaQvXYLbAe12gntocktZeIoGvYMNd4kiSpxZh4EvDyjnTdi4N370gH1Jx8Wts/3td2AevunfG6de+M133tgZp+x3zm/W1Jj7J5f1vC9DvmD/gePzN9dq87431m+uwBx1KP16Zer2+7sD0kqT11doS72kmS1GKcaieg/x3phpr+dsarRT3apB6x1COOdnp968H2kKQ1FxEXAX8AxkXEvIj4ULNj6tbVMYxlKxzxJElSK3HEk4D22n2tXjvjtcouffWIo51e33qwPSRpzWXme5sdQ1+6OoKXHPEkSVJLccSTgPbafa1eO+O1yi599YijnV7ferA9JKk9dQ4b5lQ7SZJajImnFjD9jvlMOeN6tj/pSqaccT3T75g/6DGcOHXcKm+GYWX5YPvM9Nm85uSr2O6kK3nNyVfxmemzazq/XjvjnTh1HB3DeiaIOobFoO/Sd+LUcXRVxdFVYxzurteT7SFJ7amrM1jm4uKSJLUUE09N1r3I8fxnFpO8vMjxYCefZjzyNNXfD64oywdT98Lg3VPRuhcGrzX5VA8zHnma5VXrRCxfkTW1yaSxm/eavJo0dvPagqkeIFXb4C2mTRzFF981nlEjhxPAqJHD+eK7xq+zC2nbHpLUnrqGDXOqnSRJLcbEU5O1yiLH9VqQuxXiqNe91Gth8N6SV7UuDF69NfTS5bVdA4pky00n7cefz3gHN5203zqfZLE9JKn9FLvaOeJJkqRWYuKpyVplkeN6LcjdCnHU615cGFySpKGl2NXOEU+SJLUSE09N1iqLHNdrQe5WiKNe9+LC4JIkDS2dHcN4yRFPkiS1FBNPTdYqixzXa0HuVoijXvdSr4XB1/b1bZX3iCRJra5rWLirnSRJLaaz2QGs66ZNHMVPZjzKTX96ecHq3ceMqHm9mel3zOfMq+9nwTOL2WbkcE6cOq6ma3xu2nigWL9oeSYdEbx3r21Xlg+lOOp1L5+bNp4/P/Fcj9dmyms2r+k63fe+Nm1Sj2vUy9q+vpIkNVJXxzDXeJIkqcVEDvIaPs00adKknDFjRrPD6KF7F7dq7588ZsAJju6d8SoXKR/e1THou3S1Shz10m73s7ZsD0lDQUTclpmTmh2HehqsPtgHvncLi5YsY/pxUxr+XJIk6WX99cGcatdk9do5rRV2xmuVOOql3e5nbdkekqRW5+LikiS1HhNPTdYqO6fVQ6vEUS/tdj9ry/aQJLW6zmHhVDtJklqMiacma5Wd0+qhVeKol3a7n7Vle0iSWl1X5zBecnFxSZJaiomnJmuVndPqoVXiqJcTp46jq6NnArCrI4bs/aytdnt962H6HfOZcsb1bH/SlUw543qm3zG/2SFJ0jqtyxFPkiS1HHe1a7J67MDWKruetUocdVXdd12H+7Jt+fquherF1uc/s5iTL5sNsM62iSQ1W2fHMJY54kmSpJbirnZSH6accT3ze1m/aNTI4dx00n5NiEitxPeH1Jrc1a41DVYf7OTLZnPtvX/l1k+/ueHPJUmSXuaudtIacDFt9cf3hyS1nq6OYKkjniRJaikmnqQ+uJi2+uP7Q5JaT+ewYa7xJElSizHxJPXBxbTVH98fktR6ujod8SRJUqtxcfG1NP2O+S623KZcTFv98f0hSa2na9gwE0+SJLUYE09rwV2t2t+0iaN8LdUn3x+S1Fo6O4IVCStWJMOGRbPDkSRJONVurZx59f0rk07dFi9dzplX39+kiCRJktZdXR1F13bpCkc9SZLUKkw8rQV3tZIkSWodXR3FKKelLjAuSVLLMPG0FtzVSpIkqXV0Diu6tstc50mSpJYxpNd4iojzgQOBxzNzl8F+/hOnjuuxxhMM7V2tXChdkiQNRES8Ffg60AGcl5lnNDkkpt8xn69fNweAt37td5z0th2BVTeBqC57045b8Zv7nui3jucN7fNaMSbP8zzfw57X7PMG82/9yBy6Q5EjYh/gOeCHA0k8TZo0KWfMmFHXGNolWVO9UDoUSbQvvmv8kLwfSdK6KSJuy8xJzY6jnUVEB/AA8BZgHnAr8N7MvKevcxrRB6vUWz+ma1hA9Jx211tZNc9rv/NaMSbP87xazmvFmDxvaJ/XiL/1++uDDekRT5l5Y0Rs18wY2mVXq/4WSm+H+5MkSXWzJ/BgZj4EEBE/Bg4B+kw8NVpv/ZilK1bthPdWNpA6nje0z2vFmDzP82o5rxVj8ryhfd5g/63f9ms8RcQxETEjImY88cQTzQ6nZblQuiRJGqBRwNyKx/PKsh4Gsw9mf0WSpNoM5mdn2yeeMvPczJyUmZO22mqrZofTslwoXZIkDVD0UrbK16mD2QezvyJJUm0G87Oz7RNPGpgTp45jeFdHj7KhvFC6JElqmHnAthWPRwMLmhQL0Hs/pmtY0NURqy2r5nntd14rxuR5nlfLea0Yk+cN7fMG+2/9Ib3Gk+qne25nOyyULkmSGupWYIeI2B6YDxwOHNHMgPrqxwykrFV3G/I8dwTzPM9r5Zg8b+if5652AxQRFwH7AlsCfwVOzczv9VW/0TuqSJKk5nJXu8EREW8HvgZ0AOdn5uf7q28fTJKk9tbOu9q9t9kxSJIkrWsy8yrgqmbHIUmSWp9rPEmSJEmSJKkhTDxJkiRJkiSpIUw8SZIkSZIkqSFMPEmSJEmSJKkhTDxJkiRJkiSpISIzmx3DoImIJ4BHmh1Hg20JPNnsINqQ7Vp/tmn92aaNYbvWXyPbdGxmbtWga2sN1bEP5n+Pg882H3y2eXPY7oPPNh98TemDrVOJp3VBRMzIzEnNjqPd2K71Z5vWn23aGLZr/dmmWlO+dwafbT74bPPmsN0Hn20++JrV5k61kyRJkiRJUkOYeJIkSZIkSVJDmHhqP+c2O4A2ZbvWn21af7ZpY9iu9Webak353hl8tvngs82bw3YffLb54GtKm7vGkyRJkiRJkhrCEU+SJEmSJElqCBNPkiRJkiRJaggTT0NYRHRExB0RcUUvx/aNiIURMbP8d0ozYhxKIuLhiJhdtteMXo5HRJwVEQ9GxKyI2L0ZcQ41A2hX36s1ioiREXFpRNwXEfdGxN5Vx32vroEBtKvv1RpExLiKtpoZEc9GxD9X1fG9qgGLiLdGxP3l++WkZsfTjiJi24j4Tfn/wLsj4uNl+eYR8euImFP+3KzZsbaT6j697d14vX3m2+6NFRH/Uv5/5a6IuCgiNrDN6ysizo+IxyPiroqyPts4Ik4uP1Pvj4ipjYzNxNPQ9nHg3n6O/y4zdyv/nT5YQQ1xbyrba1Ivx94G7FD+Owb49qBGNrT1167ge7VWXwd+lZk7Aruy6v8HfK+umdW1K/heHbDMvL+7rYDXAS8AP6uq5ntVAxIRHcDZFO+Z1wLvjYjXNjeqtrQM+ERm7gRMBo4r2/kk4LrM3AG4rnys+qnu09vejdfbZ77t3iARMQo4AZiUmbsAHcDh2Ob19n3grVVlvbZx+f/2w4Gdy3O+VX7WNoSJpyEqIkYD7wDOa3Ys65BDgB9m4WZgZERs3eygtG6JiE2BfYDvAWTmS5n5TFU136s1GmC7as3tD/wpMx+pKve9qoHaE3gwMx/KzJeAH1O8f1RHmflYZt5e/r6I4o/xURRt/YOy2g+Aac2JsP300ae3vRuon898272xOoHhEdEJbAgswDavq8y8EXi6qrivNj4E+HFmvpiZfwYepPisbQgTT0PX14BPASv6qbN3RNwZEb+MiJ0HKa6hLIFrIuK2iDiml+OjgLkVj+eVZerf6toVfK/W4tXAE8D/lMPyz4uIjarq+F6t3UDaFXyvrqnDgYt6Kfe9qoHyvTLIImI7YCJwC/DKzHwMiuQU8IrmRdZ2euvT296N1ddnvu3eIJk5H/gS8CjwGLAwM6/BNh8MfbXxoH6umngagiLiQODxzLytn2q3A2Mzc1fgG8D0QQluaJuSmbtTDOM/LiL2qToevZyTjQ9ryFtdu/perU0nsDvw7cycCDzPqsOSfa/WbiDt6nt1DUTEesDBwE96O9xLme9V9cb3yiCKiI2BnwL/nJnPNjuedjXAPr3qbyCf+aqjcl2hQ4DtgW2AjSLi/c2Nap03qJ+rJp6GpinAwRHxMMVQ8/0i4keVFTLz2cx8rvz9KqArIrYc9EiHkMxcUP58nGIdkuqhhvOAbSsej6YYIqp+rK5dfa/WbB4wLzNvKR9fStF5qq7je7U2q21X36tr7G3A7Zn5116O+V7VQPleGSQR0UWRdLogMy8ri//aPQ22/Pl4s+JrM3316W3vxurrM992b5w3A3/OzCcycylwGfB6bPPB0FcbD+rnqomnISgzT87M0Zm5HcX0heszs0fGOCJeFRFR/r4nxWv91KAHO0RExEYRsUn378ABwF1V1S4HjozCZIohoo8NcqhDykDa1fdqbTLzL8DciBhXFu0P3FNVzfdqjQbSrr5X19h76X2aHfhe1cDdCuwQEduXo+gOp3j/qI7K/8d9D7g3M79Scehy4IPl7x8Efj7YsbWjfvr0tncD9fOZb7s3zqPA5IjYsPz/zP4Ua8jZ5o3XVxtfDhweEetHxPYUG738sVFBdDbqwhp8EXEsQGaeAxwK/FNELAMWA4dnpkPS+/ZK4Gfl35SdwIWZ+auqNr0KeDvFwmsvAEc3KdahZCDt6nu1dscDF5R/fD0EHO17tS5W166+V2sUERsCbwE+UlHme1U1y8xlEfEx4GqK3ZDOz8y7mxxWO5oCfACYHREzy7J/B84ALomID1H8AfkPTYpvXWF7N94qn/kUXyjZ7g2QmbdExKUUyxYsA+4AzgU2xjavm4i4CNgX2DIi5gGn0sf/TzLz7oi4hCLpugw4LjOXNyw2+8ySJEmSJElqBKfaSZIkSZIkqSFMPEmSJEmSJKkhTDxJkiRJkiSpIUw8SZIkSZIkqSFMPEmSJEmSJKkhTDxJaikRsW9EXDHQ8jo837SIeG3F4xsiYtIAztu6HvFExFYR8au1vY4kSVKtIuK58ud2EXFEna/971WP/7ee15c0dJh4krSumwa8drW1VvWvwHfX9skz8wngsYiYsrbXkiRJWkPbATUlniKiYzVVeiSeMvP1NcYkqU2YeJJUk4jYKCKujIg7I+KuiHhPWf66iPhtRNwWEVdHxNZl+Q0R8bWI+N+y/p5l+Z5l2R3lz3E1xnB+RNxann9IWX5URFwWEb+KiDkR8d8V53woIh4o4/luRHwzIl4PHAycGREzI+I1ZfV/iIg/lvXf2EcY7wZ+VV67IyK+FBGzI2JWRBxflj8cEV+IiD9ExIyI2L1smz9FxLEV15oOvG+g9y9JklRnZwBvLPtD/1L2bc4s+1qzIuIjsHIE+m8i4kJgdlk2vez/3R0Rx5RlZwDDy+tdUJZ1j66K8tp3lX2n91Rc+4aIuDQi7ouICyIiuq8XEfeUsXxp0FtH0lrpbHYAkoactwILMvMdABExIiK6gG8Ah2TmE2UH4vPA/y3P2SgzXx8R+wDnA7sA9wH7ZOayiHgz8AWKZM5AfBq4PjP/b0SMBP4YEdeWx3YDJgIvAvdHxDeA5cB/ALsDi4DrgTsz838j4nLgisy8tLwfgM7M3DMi3g6cCry58skjYnvgb5n5Yll0DLA9MLG8n80rqs/NzL0j4qvA94EpwAbA3cA5ZZ0ZwOcGeO+SJEn1dhLwycw8EKBMIC3MzD0iYn3gpoi4pqy7J7BLZv65fPx/M/PpiBgO3BoRP83MkyLiY5m5Wy/P9S6K/tquwJblOTeWxyYCOwMLgJuAKRFxD/BOYMfMzLLvJ2kIMfEkqVazgS9FxH9RJGx+FxG7UCSTfl0mbjqAxyrOuQggM2+MiE3LDsMmwA8iYgcgga4aYjgAODgiPlk+3gAYU/5+XWYuBCg7KmMpOjW/zcyny/KfAH/fz/UvK3/eRjH0vNrWwBMVj98MnJOZy8r7fLri2OXlz9nAxpm5CFgUEUsiYmRmPgM8DmzT/y1LkiQNmgOACRFxaPl4BLAD8BLwx4qkE8AJEfHO8vdty3pP9XPtNwAXZeZy4K8R8VtgD+DZ8trzACJiJkU/7GZgCXBeRFwJ1H3NT0mNZeJJUk0y84GIeB3wduCL5bdfPwPuzsy9+zqtl8efBX6Tme+MiO2AG2oII4B3Z+b9PQoj9qIY6dRtOcX/56KGa1Nxje7zqy2mSHZVxlN9j9XXWlEV24qKa29QXlOSJKkVBHB8Zl7dozBiX+D5qsdvBvbOzBci4gZ69pH6unZfVunHlaPJ9wT2Bw4HPgbsN7DbkNQKXONJUk0iYhvghcz8EfAliulr9wNbRcTeZZ2uiNi54rTuuftvoBi2vZDim7P55fGjagzjauD4inn/E1dT/4/A/4mIzSKik55T+hZRjL6qxQP0HAl1DXBseW2qptoNxN8Dd9V4jiRJUr1U94euBv6pXE6BiPj7iNiol/NGUCw/8EJE7AhMrji2tPv8KjcC7ynXkdoK2Ieir9ariNgYGJGZVwH/TDFNT9IQYuJJUq3GU6ypNJNiraXPZeZLwKHAf0XEncBMoHLnkr9FsYXuOcCHyrL/phgxdRPF1LxafJZiat6siLirfNynzJxPsYbULcC1wD3AwvLwj4ETo1ik/DV9XKL6es8Df4qIvyuLzgMeLeO5kxp3hQHeBFxZ4zmSJEn1MgtYFsXmMf9C0be5B7i97Gt9h95Hgf8K6IyIWRT9sZsrjp1L0Te6oOqcn5XPdyfFupufysy/9BPbJsAV5XP8FviXmu9OUlNFZl+zQyRp7ZVDrj+ZmTOaHMfGmflcOSrpZ8D5mfmztbjeO4HXZeZn6hDbjRQLs/9tba8lSZIkSa3EEU+S1hWnlaO07gL+DExfm4uVSauH1zaocoj5V0w6SZIkSWpHjniSJEmSJElSQzjiSZIkSZIkSQ1h4kmSJEmSJEkNYeJJkgYgIt4YEffXu+7aiojTIuJHg/FckiSpfhr9GR4Rd0fEvuXvERH/ExF/i4g/Nuo5h6KIeDgi3tzsOKR2ZuJJGgLKD8TFEfFcxb9vNjuu/kTEvhExr9lxQH06dpn5u8wcV++6gykivh8Rn2t2HJIkrSsi4oiImFH23R6LiF9GxBsG47kzc+fMvKF8+AbgLcDozNxzMJ5/oOrZZ4yIGyLiw/W4Vh/Xz4j4u0ZdX2pXnc0OQNKAHZSZ166uUkR0ZuayqrKOzFw+0CdaXf2ICIrNCVYM9JqtrN3uR5IkNV9E/CtwEnAscDXwEvBW4BDg94Mczljg4cx8vtYTe+tbSlItHPEkDXERcVRE3BQRX42Ip4HTypEt346IqyLieeBNEbFT+S3QM+XQ64MrrrFK/V6e54aI+HxE3AS8ALw6Io6OiHsjYlFEPBQRHynrbgT8EtimYoTWNhExLCJOiog/RcRTEXFJRGzez739Y0Q8GBFPR8TlEbFNxbGMiGMjYk45bPzsMoFUfY23Av8OvKeM485a76es3+PbuHIU2icjYlZELIyIiyNig1rrlsc/VX4LuiAiPtzft2kRsX1E/LaM8dfAllXHfxIRfymf58aI2LksPwZ4H/Cpsh1+UZZ3vx6LIuKeiHhnX6+HJEkamIgYAZwOHJeZl2Xm85m5NDN/kZkn9nFOr5/h5bG3l5/TiyJifkR8sizfMiKuKPt3T0fE7yJiWHns4Yh4c0R8CDgP2LvsA/xnefzAiJhZnvu/ETGh4vkejoh/i4hZwPMRscqAhYh4fUTcWsZ7a0S8vuLYDRHx2Sj6qIsi4pqI2LKXa9TcZ4yIDSLiR2X5M+VzvzIiPg+8Efhm9DM7ICI+EBGPlOd/uurYnhHxh/K6j0XENyNivfLYjWW1O8vrvyciNivb/4ko+qNXRMTo3p5XWpeZeJLaw17AQ8ArgM+XZUeUv28C3AL8ArimrHM8cEFEVE4Hq6zf17dwHwCOKes8AjwOHAhsChwNfDUidi+/TXsbsCAzNy7/LQBOAKYB/wfYBvgbcHZvTxQR+wFfBA4Dti6f78dV1Q4E9gB2LetNrb5OZv4K+AJwcRnHrrXeTx9tQfmcbwW2ByYAR9VaN4rE2L8Cbwb+jqJt+nMhcBtFwumzwAerjv8S2IHidb4duAAgM88tf//vsh0OKuv/iaKTNgL4T+BHEbH1amKQJEn92xvYAPhZDef0+hle+h7wkczcBNgFuL4s/wQwD9gKeCXFl21ZedHM/B7FqKs/lH2AU8v+zfnAR4AtgO8Al0fE+hWnvhd4BzCyl9H0mwNXAmeV538FuDIitqiodgRFf+oVwHrAJ6tveA37jB+k6LdsWz73scDizPw08DvgY+V1Plb9fBHxWuDbFH3AbcrzKxNFy4F/oehn7Q3sD3y0jHWfss6u5fUvpvh7+n8oRpSNARYDLb0chtQMJp6koWN6+e1L979/rDi2IDO/kZnLMnNxWfbzzLypnD62G7AxcEZmvpSZ1wNXUHQoqK6fmUv6iOH7mXl3+TxLM/PKzPxTFn5Lkdh6Yz/38BHg05k5LzNfBE4DDu3tWzSK0TnnZ+btZd2TKb6p266izhmZ+UxmPgr8przPWqzt/ZyVmQsy82mKxF5/z99X3cOA/ynjeIEi+dOriBhDkWj7j8x8MTNvLK+1Umaen5mLKtp31/I8cdfmAAAgAElEQVRb115l5k/KuFaUHag5QEut/SBJ0hC0BfBkLVPUVvMZvhR4bURsmpl/y8zbK8q3BsaWfZnfZWauevVV/CPwncy8JTOXZ+YPgBeByRV1zsrMuRV9y0rvAOZk5v8r+1EXAfcBB1XU+Z/MfKA8/xJq66f112dcStG+f1fGfltmPjvA6x4KXJGZN5bX/Q9g5VIL5bVuLu/pYYqEXJ9fCmbmU5n508x8ITMXUXyJu7ovEaV1joknaeiYlpkjK/59t+LY3F7qV5ZtA8ytWsPoEWDUaq7R3zWJiLdFxM3l0O5ngLdTNfWryljgZ93JM+Beim+WXtlL3W3KGAHIzOeAp6pi/kvF7y9QJNdqsbb3U8vz91V3m6o4+nsdtgH+VrU+w8o2ioiOiDijHJb+LPBweajPe4iIIyuG2T9D8S1qf/csSZJW7ylgyz6+XFvFAD7D303RL3kkiin3e5flZwIPAtdEsUzASQOMbyzwicovNSlGEG1TUWd1fZJHqsqq+5Zr00/rr8/4/yjWzPpxFMsU/HdEdA3wuj36XWWf6qnuxxHx9+V0ub+Ur8MX6L8ftWFEfKecuvcscCMwMiI6arhXqe2ZeJLaQ2/fbFWWLQC2jXLOf2kMMH811+jzmuVQ7J8CXwJemZkjgauAqK5bYS7wtqoE2gaZOb+XugsoOh3dz7cRxbdbvdUdcNx9lQ/gfhrlMXoO8d52NXU3K9ui25iK34+gWLD0zRRD0Lcry3t9TSJiLPBd4GPAFuU930Xj71mSpHb3B2AJxXSxgej3Mzwzb83MQyimrU2nGEFEOULqE5n5aorRRv8aEfsP4PnmAp+v6pNtWI5c6tZf37BHP61U3bccqJr6jOXIrv/MzNcCr6dYJuHIAcQMRV9qZV8rIjak6F92+zbFyK0dMnNTiqmL/fWLPgGMA/Yq63dPx7MvJVUw8SStG24BnqdYWLorIval6JxUr5lUi/WA9YEngGUR8TbggIrjfwW2qJrmdQ7w+TLhQURsFRGH9HH9C4GjI2K3Min0BeCWcthzrf4KbFeVeKv1fhrlEor73Kns/JzSV8XMfASYAfxnRKwXxXbMlUPaN6EYJv8UsCFFm1X6K/DqiscbUXTQngCIiKMpRjxJkqS1kJkLKT7Tz46IaeXImK5ydPV/93JKn5/h5Wf++yJiRGYuBZ6lGP3TvUD430VEVJQPZCfj7wLHRsReUdgoIt4REZsM8BavAv4+Io6IiM6IeA/wWoqlHGpVU58xIt4UEePLUUXPUky9W15xrcq+TrVLgQMj4g1RLBp+Oj3/Jt6kvOZzEbEj8E+9xPrqqvqLgWfKda9OHehNS+sSE0/S0PGLeHm3j+ciYsCLVWbmS8DBFIs3Pgl8CzgyM+9b02DKeewnUCRO/kbxTd3lFcfvAy4CHiqHSW8DfL2sc01ELAJuplgYvbfrX0cx7/6nFN9OvQY4fA3D/Un586mIuL23Cqu7n0bJzF9SLMz5G4qh8n8oD73YxylHULTZ0xSdmx9WHPshxTD3+cA9FO1b6XsU60M8ExHTM/Me4Mvlc/4VGA/ctLb3JEmSIDO/QrGByGcovuSZSzHKeHov1Vf3Gf4B4OFyOtexwPvL8h2Aa4HnKD7Pv5WZNwwgthkU6zx9k6Lf8yD9b5JSff5TFCONPkGRLPsUcGBmPjnQa1Rcq9Y+46soEkjPUkzB+y3wo/LY1ynWgvpbRJzVy3PdDRxH8QXnYxT3Pq+iyicp+lqLKJJzF1dd4jTgB2WchwFfA4ZT9K9vBn5V6/1L64IY2NpzkqTBEBE7UUx3W7+WBUklSZIkqRU54kmSmiwi3lkOo98M+C/gFyadJEmSJLUDE0+S1HwfoRiC/yeKNQqq1xOQJEmSpCHJqXaSJEmSJElqCEc8SZIkSZIkqSE6mx3AYNpyyy1zu+22a3YYkiSpQW677bYnM3OrZsehnuyDSZLU3vrrg61TiaftttuOGTNmNDsMSZLUIBHxSLNj0Krsg0mS1N7664M51U6SJEkARMTDETE7ImZGxCqZoiicFREPRsSsiNi9GXFKkqShY50a8SRJkqTVelNmPtnHsbcBO5T/9gK+Xf6UJEnqlSOeJEmSNFCHAD/Mws3AyIjYutlBSZKk1uWIJ0mSJHVL4JqISOA7mXlu1fFRwNyKx/PKsseqLxQRxwDHAIwZM2aVJ1q6dCnz5s1jyZIldQpd9bDBBhswevRourq6mh2KJKlNmHiSJElStymZuSAiXgH8OiLuy8wbK45HL+dkbxcqk1bnAkyaNGmVOvPmzWOTTTZhu+22I6K3y2qwZSZPPfUU8+bNY/vtt292OJKkNuFUO0mSJAGQmQvKn48DPwP2rKoyD9i24vFoYMGaPNeSJUvYYostTDq1kIhgiy22cBSaJKmuTDxJkiSJiNgoIjbp/h04ALirqtrlwJHl7naTgYWZuco0uxqec43jVWP4mkhSG5p1CXx1FzhtZPFz1iWD+vROtZMkSRLAK4GflYmHTuDCzPxVRBwLkJnnAFcBbwceBF4Ajm5SrJIkaSBmXQK/OAGWLi4eL5xbPAaYcNighOCIJ0mSJJGZD2XmruW/nTPz82X5OWXSiXI3u+My8zWZOT4zZzQ36vq577772HvvvVl//fX50pe+1NDnevjhh7nwwgsb+hySJAFw3ekvJ526LV1clA8SE0+SJElqedPvmM+UM65n+5OuZMoZ1zP9jvl1vf7mm2/OWWedxSc/+cm6Xrc3Jp4kSYNm4bzayhvAxJMkSZJa2vQ75nPyZbOZ/8xiEpj/zGJOvmx2XZNPr3jFK9hjjz3o6upao/N/8pOfsMsuu7Drrruyzz77ALB8+XJOPPFE9thjDyZMmMB3vvMdAE466SR+97vfsdtuu/HVr36VJUuWcPTRRzN+/HgmTpzIb37zGwDuvvtu9txzT3bbbTcmTJjAnDlzAJg2bRqve93r2HnnnTn33HPrcPeSpLY1YnRt5Q3gGk+SJElqaWdefT+Lly7vUbZ46XLOvPp+pk0cNaixfPjDH+bYY49l0qRJPcpPP/10rr76akaNGsUzzzwDwPe+9z1GjBjBrbfeyosvvsiUKVM44IADOOOMM/jSl77EFVdcAcCXv/xlAGbPns19993HAQccwAMPPMA555zDxz/+cd73vvfx0ksvsXx50Qbnn38+m2++OYsXL2aPPfbg3e9+N1tsscUgtoIkacjY/5SeazwBdA0vygeJiSdJkiS1tAXPLK6pvJHOO++8XsunTJnCUUcdxWGHHca73vUuAK655hpmzZrFpZdeCsDChQuZM2cO6623Xo9zf//733P88ccDsOOOOzJ27FgeeOAB9t57bz7/+c8zb9483vWud7HDDjsAcNZZZ/Gzn/0MgLlz5zJnzhwTT5Kk3nUvIH7d6cX0uhGji6TTIC0sDiaeJEmS1OK2GTmc+b0kmbYZOXyNr3n22Wfz3e9+F4CrrrqKbbbZZo2vBXDOOedwyy23cOWVV7Lbbrsxc+ZMMpNvfOMbTJ06tUfdG264ocfjzOz1mkcccQR77bUXV155JVOnTuW8885j2LBhXHvttfzhD39gww03ZN9992XJkiVrFbskqc1NOGxQE03VXONJkiRJLe3EqeMY3tXRo2x4VwcnTh23xtc87rjjmDlzJjNnzlzrpBPAn/70J/baay9OP/10ttxyS+bOncvUqVP59re/zdKlSwF44IEHeP7559lkk01YtGjRynP32WcfLrjggpV1Hn30UcaNG8dDDz3Eq1/9ak444QQOPvhgZs2axcKFC9lss83YcMMNue+++7j55pvXOnZJkhrJEU+SJElqad3rOJ159f0seGYx24wczolTx9V1fae//OUvTJo0iWeffZZhw4bxta99jXvuuYdNN920R72+1ng68cQTmTNnDpnJ/vvvz6677sqECRN4+OGH2X333clMttpqK6ZPn86ECRPo7Oxk11135aijjuKjH/0oxx57LOPHj6ezs5Pvf//7rL/++lx88cX86Ec/oquri1e96lWccsopbLTRRpxzzjlMmDCBcePGMXny5Lq1gSRJjRB9De1tR5MmTcoZM2Y0OwxJktQgEXFbZk5afU0Npt76YPfeey877bRTkyJSf3xtJEm16q8P5lQ7SZIkSZIkNYSJJ0mSJEmSWtGsS+Cru8BpI4ufsy5pdkRSzVzjSZIkSZKkVjPrEvjFCbC03NVz4dziMTR1hzKpVo54kiRJkiSp1Vx3+stJp25LFxfl0hBi4kmSJEmSpFazcF5t5VKLMvEkSZIkSVKrGTG6tnKpRZl4kiRJ0jrv05/+NNtuuy0bb7xxs0NZ6ZRTTuHaa6+t+bwbbriBAw88sAERSRpU+58CXcN7lnUNL8qlIcTEkyRJklpfg3d2Ouigg/jjH/9Y12sORGayYsWKXo+dfvrpvPnNb254DMuWLWv4c0haAxMOg4POghHbAlH8POgsFxbXkGPiSZIkSa2te2enhXOBfHlnpzomnyZPnszWW2+9Ruf+27/9G9/61rdWPj7ttNP48pe/DMCZZ57JHnvswYQJEzj11FMBePjhh9lpp5346Ec/yu67787cuXM56qij2GWXXRg/fjxf/epXATjqqKO49NJLAbj11lt5/etfz6677sqee+7JokWLWLJkCUcffTTjx49n4sSJ/OY3v1kltqeffppp06YxYcIEJk+ezKxZs1bGeMwxx3DAAQdw5JFHrtF9SxoEEw6Df7kLTnum+GnSSUOQiSdJkiS1thbZ2WnGjBl8+MMfXqX88MMP5+KLL175+JJLLuEf/uEfuOaaa5gzZw5//OMfmTlzJrfddhs33ngjAPfffz9HHnkkd9xxB08++STz58/nrrvuYvbs2Rx99NE9rv/SSy/xnve8h69//evceeedXHvttQwfPpyzzz4bgNmzZ3PRRRfxwQ9+kCVLlvQ499RTT2XixInMmjWLL3zhCz2STLfddhs///nPufDCC+vWRpIkVTPxJEmSpNbWIjs7TZo0ifPOO2+V8okTJ/L444+zYMEC7rzzTjbbbDPGjBnDNddcwzXXXMPEiRPZfffdue+++5gzZw4AY8eOZfLkyQC8+tWv5qGHHuL444/nV7/6FZtuummP699///1svfXW7LHHHgBsuummdHZ28vvf/54PfOADAOy4446MHTuWBx54oMe5lXX2228/nnrqKRYuXAjAwQcfzPDhVevHSJJUZ01NPEXEWyPi/oh4MCJO6uV4RMRZ5fFZEbF71fGOiLgjIq4YvKglSZI0qIbAzk6HHnool156KRdffDGHH344UKzfdPLJJzNz5kxmzpzJgw8+yIc+9CEANtpoo5XnbrbZZtx5553su+++nH322auMqspMImKV58zM1cbVW53ua1XGIElSozQt8RQRHcDZwNuA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\n",
      "text/plain": [
       "<Figure size 1440x720 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw results\n",
    "plt.figure(figsize=(20,10))\n",
    "plt.suptitle('Perceptron algorithm')\n",
    "\n",
    "# subfigure 1: training samples and learned linear classifier\n",
    "plt.subplot(2,2,1)\n",
    "plt.title('Classifer on training data')\n",
    "b = -ppn.w[0]/ppn.w[2]\n",
    "a = -ppn.w[1]/ppn.w[2]\n",
    "x = np.linspace(X_train[:,0].min(), X_train[:,0].max())\n",
    "f = lambda x : a*x + b\n",
    "plt.plot(x, f(x),'r')\n",
    "\n",
    "plt.scatter(X_train[y_train==-1][:,0], X_train[y_train==-1][:,1], label='-1 : %s' % exp_classes[0])\n",
    "plt.scatter(X_train[y_train==1][:,0], X_train[y_train==1][:,1], label=' 1 : %s' % exp_classes[1])\n",
    "plt.xlabel(exp_features[0])\n",
    "plt.ylabel(exp_features[1])\n",
    "plt.legend()\n",
    "\n",
    "# subfigure 2: weight update times in the training process\n",
    "plt.subplot(2,2,2)\n",
    "plt.title('Weight update times')\n",
    "plt.plot(range(1, len(ppn.update_times_list)+1), ppn.update_times_list, marker='o', label='error times')\n",
    "plt.xlabel('Iterations')\n",
    "plt.ylabel('Update times')\n",
    "\n",
    "# subfigure 3: change of error rate in the training process\n",
    "plt.subplot(2,2,3)\n",
    "plt.title('Error rate on training data')\n",
    "plt.plot(range(1, len(ppn.error_rate_list)+1), ppn.error_rate_list, marker='+', color='coral', label='error rate')\n",
    "plt.xlabel('Iterations')\n",
    "plt.ylabel('Error rates')\n",
    "\n",
    "# subfigure 4: test samples and learned linear classifier\n",
    "plt.subplot(2,2,4)\n",
    "plt.title('Classifer on test data')\n",
    "x = np.linspace(X_test[:,0].min(), X_test[:,0].max())\n",
    "plt.plot(x, f(x),'r')\n",
    "\n",
    "plt.scatter(X_test[y_test==-1][:,0], X_test[y_test==-1][:,1], label='-1 : %s' % exp_classes[0])\n",
    "plt.scatter(X_test[y_test==1][:,0], X_test[y_test==1][:,1], label=' 1 : %s' % exp_classes[1])\n",
    "plt.xlabel(exp_features[0])\n",
    "plt.ylabel(exp_features[1])\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
